package com.itheima.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.annotation.MyLog;
import com.itheima.entity.*;
import com.itheima.mapper.EmpMapper;
import com.itheima.service.EmpService;
import com.itheima.util.BcriptUtils;
import lombok.extern.java.Log;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

@Slf4j
@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    EmpMapper empMapper;
    @Override
    public PageBean pageQuery(PageQueryBean pageQueryBean) {
        /*//1.调用mapper持久层，查询emp用户表的总记录数
         *//*Integer count = empMapper.count();*//*

        //2、调用调用mapper持久层，查询emp指定的员工图表数据：select *from
        //分页起始位置=（page-1）*pageSize
        page = (page-1) *pageSize;
        List<Emp> empList = empMapper.selectByPage(page,pageSize);

        //3、封装PageBean对象
        PageBean pageBean = new PageBean();
        pageBean.setTotal(count);
        pageBean.setRows(empList);

        return pageBean;*/


        // 1.开启分页查询（分页插件）
        PageHelper.startPage(pageQueryBean.getPage(), pageQueryBean.getPageSize());
        //2、调用调用mapper持久层，查询emp指定页的员工列表表数据
        /*当开启分页功能，后续查询功能，将被进行增强a
           1.在原来SQL语句后追加limit，查询指定页数据：List<>
        *  2.单独发起SQL语句，查询总记录数：count
        * 3.将查询的两个结果封装到一个Page对象中返回
        * */
        Page pageResult = (Page) empMapper.selectByPage(pageQueryBean);
        // 3.封装结果数据
        PageBean pageBean = new PageBean();
        pageBean.setTotal((int) pageResult.getTotal());
        pageBean.setRows(pageResult.getResult());
        return pageBean;
    }

    //批量删除员工业务方法
    @Override
    public void delete(List<Integer> ids) {
        // 1.调用持久层，批量根据id删除员工信息
        empMapper.delete(ids);
    }

    // 添加员工基本属性


    @Override
    public void addEmp(Emp emp) {
        //补充基本属性
        emp.setCreateTime(LocalDateTime.now());
        emp.setUpdateTime(LocalDateTime.now());

        emp.setPassword(BcriptUtils.hashPassword("123456"));

        empMapper.insert(emp);
    }

    //根据id
    @Override
    public Emp queryOne(Integer id) {

        Emp emp = empMapper.queryOne(id);

        return emp;
    }
    // 更新
    @Override
    public void update(Emp emp) {
        emp.setCreateTime(LocalDateTime.now());
        emp.setUpdateTime(LocalDateTime.now());
        empMapper.update(emp);
    }
    // 员工登录验证方法
    @Override
    public Emp checkLogin(Emp emp) {
        //查询emp表，检查用户 信息是否存在
        Emp empResult = empMapper.selectByNameAndPwd(emp);
        // 1.查询用户名是否存在：select * from emp where username = #{username}
        if (empResult == null){
            //登录失败,用户名不存在
            return null;
        }
       // 2. 查询校验密码是否正确（密码锁加码存储）：asdasdasdsad == 123456

        if (!BcriptUtils.verifyPassword(emp.getPassword(),empResult.getPassword())){

            return null;
        }
        return empResult;
    }






    /*
     * 员工管理分页查询员工
     *
     * */
    @Override
    public PageBean pageQuery(Integer page, Integer pageSize) {
        Integer count = empMapper.count();
        page = (page - 1) * pageSize;
        List<Class> studentList = empMapper.pageQuery(page, pageSize);


        PageBean pageBean = new PageBean();
        pageBean.setTotal((count));
        pageBean.setRows(studentList);
        return pageBean;
    }
    /*
     * 员工管理添加员工
     *
     * */
    @Override
    public void add(Yuang yuang) {
        //补充基本属性
        yuang.setCreate_time(LocalDateTime.now());
        yuang.setUpdate_time(LocalDateTime.now());

        empMapper.add(yuang);
    }
    /*
     * 员工管理根据id查询
     * */
    @Override
    public Emp query(Integer id) {

        Emp emp = empMapper.query(id);

        return emp;
    }
    /*
     * 员工管理更新员工
     * */
    @Override
    public void updated(Yuang yuang) {
        yuang.setCreate_time(LocalDateTime.now());
        yuang.setUpdate_time(LocalDateTime.now());
        empMapper.updated(yuang);
    }
    /*
     *员工登录，退出
     * */
    @Override
    public Emp checkLoging(Yuang yuang) {
        //查询emp表，检查用户 信息是否存在
        return empMapper.selectByNameAndPw(yuang);
    }
    /*
     *禁用/启用员工
     * */
    @Override
    public Emp st(Integer id) {
        return empMapper.selectByNameAndP(id);
    }




    /*
     * 修改
     * */
    @Override
    public void xiugai(Fenlei fenlei) {
        fenlei.setCreateTime(LocalDateTime.now());
        fenlei.setUpdateTime(LocalDateTime.now());
        empMapper.xiuugai(fenlei);
    }
    /*
     * 新增分类
     *
     * */
    @Override
    public void addE(Fenlei fenlei) {
        // 1. 补全基础属性：createTime  / updateTime
        fenlei.setCreateTime(LocalDateTime.now());
        fenlei.setUpdateTime(LocalDateTime.now());
        // 2.调用持久层mapper， 向数据表dept中添加新的的部门信息
        empMapper.inser(fenlei);
    }
    /*
     * 根据id删除分类
     * */
    @Override
    public void removeById(Integer id) {
        empMapper.deleteBuId(id);
    }
    /*
     *禁用/启用分类
     * */
    @Override
    public Emp std(Integer id) {
        return empMapper.selectByNameAnd(id);
    }
/*
* 分页
* */
    @Override
    public PageBean page(Integer page, Integer pageSize) {
        Integer count = empMapper.count();
        page = (page - 1) * pageSize;
        List<Fenlei> studentList = empMapper.pageQuer(page, pageSize);


        PageBean pageBean = new PageBean();
        pageBean.setTotal((count));
        pageBean.setRows(studentList);
        return pageBean;

    }
    //根据类型查询
    @Override
    public void fen(Map map) {
        empMapper.fen(map);
    }
}
